package com.xw.comm.utils;

import com.xw.comm.entity.Common;
import com.xw.comm.entity.KeyConstant;

import java.util.HashMap;
import java.util.Map;

/**
 * @author ：xiongwei
 * @date ：Created in 2021/1/31 17:04
 */
public class KeyUtil {


    /**
     * 获取所有的按键结合对象
     *
     * @return 集合
     */
    public static Map<String, Byte> getKeys() {
        Map<String, Byte> keyCommMap = new HashMap<>(Common.KEY_COUNT);

        // 小写字母
        keyCommMap.putAll(getLowercaseLetters());

        // 大写字母
        keyCommMap.putAll(getCapitalLetters());

        // 数字
        keyCommMap.putAll(getNumbers());

        // F1~F12
        keyCommMap.putAll(getFKeys());

        // 方向键
        keyCommMap.putAll(getDirectionKey());

        // 功能键
        keyCommMap.putAll(getFunctionKey());

        // 符号按键
        keyCommMap.putAll(getSymbolKey());

        return keyCommMap;
    }

    /**
     * 小写字母与按键映射关系
     *
     * @return 小写字母集合
     */
    public static Map<String, Byte> getLowercaseLetters() {
        Map<String, Byte> keyCommMap = new HashMap<>(Common.KEY_COUNT);
        keyCommMap.put("a", KeyConstant.KEY_a);
        keyCommMap.put("b", KeyConstant.KEY_b);
        keyCommMap.put("c", KeyConstant.KEY_c);
        keyCommMap.put("d", KeyConstant.KEY_d);
        keyCommMap.put("e", KeyConstant.KEY_e);
        keyCommMap.put("f", KeyConstant.KEY_f);
        keyCommMap.put("g", KeyConstant.KEY_g);
        keyCommMap.put("h", KeyConstant.KEY_h);
        keyCommMap.put("i", KeyConstant.KEY_i);
        keyCommMap.put("j", KeyConstant.KEY_j);
        keyCommMap.put("k", KeyConstant.KEY_k);
        keyCommMap.put("l", KeyConstant.KEY_l);
        keyCommMap.put("m", KeyConstant.KEY_m);
        keyCommMap.put("n", KeyConstant.KEY_n);
        keyCommMap.put("o", KeyConstant.KEY_o);
        keyCommMap.put("p", KeyConstant.KEY_p);
        keyCommMap.put("q", KeyConstant.KEY_q);
        keyCommMap.put("r", KeyConstant.KEY_r);
        keyCommMap.put("s", KeyConstant.KEY_s);
        keyCommMap.put("t", KeyConstant.KEY_t);
        keyCommMap.put("u", KeyConstant.KEY_u);
        keyCommMap.put("v", KeyConstant.KEY_v);
        keyCommMap.put("w", KeyConstant.KEY_w);
        keyCommMap.put("x", KeyConstant.KEY_x);
        keyCommMap.put("y", KeyConstant.KEY_y);
        keyCommMap.put("z", KeyConstant.KEY_z);
        return keyCommMap;
    }

    /**
     * 大写字母与按键映射关系
     *
     * @return 大写字母集合
     */
    public static Map<String, Byte> getCapitalLetters() {
        Map<String, Byte> keyCommMap = new HashMap<>(Common.KEY_SMALL_COUNT);
        keyCommMap.put("A", KeyConstant.KEY_A);
        keyCommMap.put("B", KeyConstant.KEY_B);
        keyCommMap.put("C", KeyConstant.KEY_C);
        keyCommMap.put("D", KeyConstant.KEY_D);
        keyCommMap.put("E", KeyConstant.KEY_E);
        keyCommMap.put("F", KeyConstant.KEY_F);
        keyCommMap.put("G", KeyConstant.KEY_G);
        keyCommMap.put("H", KeyConstant.KEY_H);
        keyCommMap.put("I", KeyConstant.KEY_I);
        keyCommMap.put("J", KeyConstant.KEY_J);
        keyCommMap.put("K", KeyConstant.KEY_K);
        keyCommMap.put("L", KeyConstant.KEY_L);
        keyCommMap.put("M", KeyConstant.KEY_M);
        keyCommMap.put("N", KeyConstant.KEY_N);
        keyCommMap.put("O", KeyConstant.KEY_O);
        keyCommMap.put("P", KeyConstant.KEY_P);
        keyCommMap.put("Q", KeyConstant.KEY_Q);
        keyCommMap.put("R", KeyConstant.KEY_R);
        keyCommMap.put("S", KeyConstant.KEY_S);
        keyCommMap.put("T", KeyConstant.KEY_T);
        keyCommMap.put("U", KeyConstant.KEY_U);
        keyCommMap.put("V", KeyConstant.KEY_V);
        keyCommMap.put("W", KeyConstant.KEY_W);
        keyCommMap.put("X", KeyConstant.KEY_X);
        keyCommMap.put("Y", KeyConstant.KEY_Y);
        keyCommMap.put("Z", KeyConstant.KEY_Z);
        return keyCommMap;
    }

    /**
     * 获取数字
     *
     * @return 数字集合
     */
    public static Map<String, Byte> getNumbers() {
        Map<String, Byte> keyCommMap = new HashMap<>(Common.KEY_SMALL_COUNT);
        keyCommMap.put("0", KeyConstant.KEY_0);
        keyCommMap.put("1", KeyConstant.KEY_1);
        keyCommMap.put("2", KeyConstant.KEY_2);
        keyCommMap.put("3", KeyConstant.KEY_3);
        keyCommMap.put("4", KeyConstant.KEY_4);
        keyCommMap.put("5", KeyConstant.KEY_5);
        keyCommMap.put("6", KeyConstant.KEY_6);
        keyCommMap.put("7", KeyConstant.KEY_7);
        keyCommMap.put("8", KeyConstant.KEY_8);
        keyCommMap.put("9", KeyConstant.KEY_9);
        return keyCommMap;
    }

    /**
     * F1~F12
     *
     * @return F集合
     */
    public static Map<String, Byte> getFKeys() {
        Map<String, Byte> keyCommMap = new HashMap<>(Common.KEY_SMALL_COUNT);
        keyCommMap.put("F1", KeyConstant.KEY_F1);
        keyCommMap.put("F2", KeyConstant.KEY_F2);
        keyCommMap.put("F3", KeyConstant.KEY_F3);
        keyCommMap.put("F4", KeyConstant.KEY_F4);
        keyCommMap.put("F5", KeyConstant.KEY_F5);
        keyCommMap.put("F6", KeyConstant.KEY_F6);
        keyCommMap.put("F7", KeyConstant.KEY_F7);
        keyCommMap.put("F8", KeyConstant.KEY_F8);
        keyCommMap.put("F9", KeyConstant.KEY_F9);
        keyCommMap.put("F10", KeyConstant.KEY_F10);
        keyCommMap.put("F11", KeyConstant.KEY_F11);
        keyCommMap.put("F12", KeyConstant.KEY_F12);
        return keyCommMap;
    }

    /**
     * 方向键
     *
     * @return 方向键
     */
    public static Map<String, Byte> getDirectionKey() {
        Map<String, Byte> keyCommMap = new HashMap<>(Common.KEY_SMALL_COUNT);
        keyCommMap.put("UP", KeyConstant.KEY_UP_ARROW);
        keyCommMap.put("DOWN", KeyConstant.KEY_DOWN_ARROW);
        keyCommMap.put("LEFT", KeyConstant.KEY_LEFT_ARROW);
        keyCommMap.put("RIGHT", KeyConstant.KEY_RIGHT_ARROW);
        return keyCommMap;
    }

    /**
     * 功能键 如：ctrl、alt等
     *
     * @return 功能键集合
     */
    public static Map<String, Byte> getFunctionKey() {
        Map<String, Byte> keyCommMap = new HashMap<>(Common.KEY_SMALL_COUNT);
        keyCommMap.put("LEFT_CTRL", KeyConstant.KEY_LEFT_CTRL);
        keyCommMap.put("LEFT_SHIFT", KeyConstant.KEY_LEFT_SHIFT);
        keyCommMap.put("LEFT_ALT", KeyConstant.KEY_LEFT_ALT);
        // win键
        keyCommMap.put("LEFT_GUI", KeyConstant.KEY_LEFT_GUI);

        keyCommMap.put("RIGHT_CTRL", KeyConstant.KEY_RIGHT_CTRL);
        keyCommMap.put("RIGHT_SHIFT", KeyConstant.KEY_RIGHT_SHIFT);
        keyCommMap.put("RIGHT_ALT", KeyConstant.KEY_RIGHT_ALT);
        // win键
        keyCommMap.put("RIGHT_GUI", KeyConstant.KEY_RIGHT_GUI);
        // 空格键
        keyCommMap.put("BACKSPACE", KeyConstant.KEY_BACKSPACE);
        keyCommMap.put("TAB", KeyConstant.KEY_TAB);
        keyCommMap.put("RETURN", KeyConstant.KEY_RETURN);
        keyCommMap.put("ESC", KeyConstant.KEY_ESC);
        keyCommMap.put("INSERT", KeyConstant.KEY_INSERT);
        keyCommMap.put("DELETE", KeyConstant.KEY_DELETE);
        keyCommMap.put("PAGE_UP", KeyConstant.KEY_PAGE_UP);
        keyCommMap.put("PAGE_DOWN", KeyConstant.KEY_PAGE_DOWN);
        keyCommMap.put("HOME", KeyConstant.KEY_HOME);
        keyCommMap.put("END", KeyConstant.KEY_END);
        keyCommMap.put("LOCK", KeyConstant.KEY_CAPS_LOCK);

        return keyCommMap;
    }

    /**
     * 符号按键
     *
     * @return 符号按键
     */
    public static Map<String, Byte> getSymbolKey() {
        Map<String, Byte> keyCommMap = new HashMap<>(Common.KEY_SMALL_COUNT);
        keyCommMap.put(",", KeyConstant.KEY_M_r1);
        keyCommMap.put("<", KeyConstant.KEY_M_r1);
        keyCommMap.put("《", KeyConstant.KEY_M_r1);
        keyCommMap.put("，", KeyConstant.KEY_M_r1);

        keyCommMap.put("。", KeyConstant.KEY_M_r2);
        keyCommMap.put(".", KeyConstant.KEY_M_r2);
        keyCommMap.put(">", KeyConstant.KEY_M_r2);
        keyCommMap.put("》", KeyConstant.KEY_M_r2);

        keyCommMap.put("/", KeyConstant.KEY_M_r3);
        keyCommMap.put("?", KeyConstant.KEY_M_r3);
        keyCommMap.put("？", KeyConstant.KEY_M_r3);

        keyCommMap.put(";", KeyConstant.KEY_L_r1);
        keyCommMap.put(":", KeyConstant.KEY_L_r1);
        keyCommMap.put("；", KeyConstant.KEY_L_r1);
        keyCommMap.put("：", KeyConstant.KEY_L_r1);

        keyCommMap.put("'", KeyConstant.KEY_L_r2);
        keyCommMap.put("‘", KeyConstant.KEY_L_r2);
        keyCommMap.put("“", KeyConstant.KEY_L_r2);
        keyCommMap.put("\"", KeyConstant.KEY_L_r2);

        keyCommMap.put("[", KeyConstant.KEY_P_r1);
        keyCommMap.put("【", KeyConstant.KEY_P_r1);
        keyCommMap.put("{", KeyConstant.KEY_P_r1);

        keyCommMap.put("]", KeyConstant.KEY_P_r2);
        keyCommMap.put("】", KeyConstant.KEY_P_r2);
        keyCommMap.put("}", KeyConstant.KEY_P_r2);

        keyCommMap.put("\\", KeyConstant.KEY_P_r3);
        keyCommMap.put("、", KeyConstant.KEY_P_r3);
        keyCommMap.put("|", KeyConstant.KEY_P_r3);

        keyCommMap.put("`", KeyConstant.KEY_1_l1);
        keyCommMap.put("~", KeyConstant.KEY_1_l1);
        keyCommMap.put("·", KeyConstant.KEY_1_l1);
        return keyCommMap;
    }

}
